home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / equel / comment.c < prev    next >
Encoding:
C/C++ Source or Header  |  1984-12-31  |  1.5 KB  |  70 lines

  1. # include    <stdio.h>
  2. # include    "constants.h"
  3. # include    "globals.h"
  4. # include    <sccs.h>
  5.  
  6. SCCSID(@(#)comment.c    8.1    12/31/84)
  7.  
  8.  
  9. /*
  10. **  COMMENT.C -- routine to scan comments inside an equel statement
  11. **
  12. **    Uses the endcmnt token code to find the endcmnt
  13. **    terminal string, then reads the input until it sees this 
  14. **    terminal (must be <= 2 characters), returning EOF_TOK and
  15. **    giving an error diagnostic if end-of-file is encountered.
  16. **
  17. **    Parameters:
  18. **        none
  19. **
  20. **    Returns:
  21. **        CONTINUE -- valid comment
  22. **        EOF_TOK -- EOF in comment
  23. **
  24. **    Side Effects:
  25. **        deletes comments from within an equel statement
  26. */
  27.  
  28.  
  29. comment()
  30. {
  31.     register int        i, l;
  32.     register struct optab    *op;
  33.     char            buf [3];
  34.  
  35.     /* find end of comment operator */
  36.     for (op = Optab; op->op_term; op++)
  37.         if (op->op_token == Tokens.sp_endcmnt)
  38.             break;
  39.  
  40.     if (!op->op_term)
  41.         syserr("no end of comment operator in the parse tables");
  42.     /* scan for the end of comment */
  43.     l = length(op->op_term);
  44.     if (l > sizeof buf - 1)
  45.         syserr("comment : buf too short for endcmnt %s %d",
  46.         op->op_term, l);
  47.  
  48.     /* fill buffer to length of endmnt terminal */
  49.     for (i = 0; i < l; i++)        
  50.     {
  51.         if ((buf [i] = getch()) == EOF_TOK)
  52.         {
  53. nontermcom :
  54.             /* non-terminated comment */
  55.             yysemerr("premature EOF encountered in comment", 0);
  56.             return (EOF_TOK);
  57.         }
  58.     }
  59.  
  60.     /* shift on input until endcmnt */
  61.     while (!bequal(buf, op->op_term, l))
  62.     {
  63.         for (i = 0; i < l - 1; i++)
  64.             buf [i] = buf [i + 1];
  65.         if ((buf [l - 1] = getch()) == EOF_TOK)
  66.             goto nontermcom;
  67.     }
  68.     return (CONTINUE);
  69. }
  70.